package cluster

import (
    "context"
    "errors"
    "github.com/HDT3213/godis/src/redis/client"
    "github.com/jolestar/go-commons-pool/v2"
)

type ConnectionFactory struct {
    Peer string
}

func (f *ConnectionFactory) MakeObject(ctx context.Context) (*pool.PooledObject, error) {
    c, err := client.MakeClient(f.Peer)
    if err != nil {
        return nil, err
    }
    c.Start()
    return pool.NewPooledObject(c), nil
}

func (f *ConnectionFactory) DestroyObject(ctx context.Context, object *pool.PooledObject) error {
    c, ok := object.Object.(*client.Client)
    if !ok {
        return errors.New("type mismatch")
    }
    c.Close()
    return nil
}

func (f *ConnectionFactory) ValidateObject(ctx context.Context, object *pool.PooledObject) bool {
    // do validate
    return true
}

func (f *ConnectionFactory) ActivateObject(ctx context.Context, object *pool.PooledObject) error {
    // do activate
    return nil
}

func (f *ConnectionFactory) PassivateObject(ctx context.Context, object *pool.PooledObject) error {
    // do passivate
    return nil
}
